import socket

# 尝试创建一个套接字对象
try:
    print('Creating Socket...')
    # 创建一个基于 IPv4 地址族和 TCP 协议的套接字
    # socket.AF_INET 表示使用 IPv4 地址族
    # socket.SOCK_STREAM 表示使用面向连接的 TCP 协议
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    print('Socket created successfully.')
# 捕获创建套接字过程中可能出现的 socket 相关错误
except socket.error as sock_err:
    # 若创建失败，打印失败信息及具体错误内容
    print(f'Failed to create socket: {sock_err}')
# 若套接字创建成功，执行此代码块
else:
    try:
        print('Connecting to remote host...')
        # 尝试连接到指定的远程主机和端口
        # 这里的远程主机是 www.baidu.com，端口号为 80（HTTP 协议默认端口）
        s.connect(('www.baidu.com', 80))
        print('Connected to remote host successfully.')
    # 捕获地址解析相关的错误，例如域名无法解析成 IP 地址
    except socket.gaierror as gaierr:
        print(f'Address-related error occurred: {gaierr}')
    # 捕获连接服务器过程中出现的其他 socket 相关错误
    except socket.error as sock_err:
        print(f'Error occurred while connecting to the server: {sock_err}')
    # 无论连接成功与否，都会执行此代码块
    finally:
        # 检查套接字对象 s 是否存在于当前局部变量中，并且 s 不为 None
        if 's' in locals() and s:
            # 关闭套接字，释放系统资源
            s.close()
            print('Socket closed.')